package model

import (
	"service/basic/config"
	"time"
)

type Order struct {
	Id            uint      `gorm:"column:id;type:int UNSIGNED;primaryKey;not null;" json:"id"`
	OrderNo       string    `gorm:"column:order_no;type:varchar(255);comment:订单编号;not null;" json:"order_no"`                               // 订单编号
	UserId        uint      `gorm:"column:user_id;type:int UNSIGNED;comment:用户id;not null;" json:"user_id"`                                   // 用户id
	CleanerId     uint      `gorm:"column:cleaner_id;type:int UNSIGNED;comment:保洁师id;not null;" json:"cleaner_id"`                           // 保洁师id
	Address       string    `gorm:"column:address;type:varchar(255);comment:地址;not null;" json:"address"`                                     // 地址
	CleanerAre    uint      `gorm:"column:cleaner_are;type:int UNSIGNED;comment:服务面积;not null;" json:"cleaner_are"`                         // 服务面积
	Diff          uint      `gorm:"column:diff;type:int UNSIGNED;comment:难度系数;not null;" json:"diff"`                                       // 难度系数
	ClearanerType string    `gorm:"column:clearaner_type;type:varchar(255);comment:服务类型;not null;" json:"clearaner_type"`                   // 服务类型
	PriceCount    uint      `gorm:"column:price_count;type:int UNSIGNED;comment:价格;not null;" json:"price_count"`                             // 价格
	Status        uint      `gorm:"column:status;type:int UNSIGNED;comment:订单状态：1待接单 2已接单;not null;default:1;" json:"status"`         // 订单状态：1待接单 2已接单
	PayStatus     uint      `gorm:"column:pay_status;type:int UNSIGNED;comment:支付状态：1待支付 2已支付;not null;default:1;" json:"pay_status"` // 支付状态：1待支付 2已支付
	CreatedAt     time.Time `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt     time.Time `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt     time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (o *Order) TableName() string {
	return "order"
}

// 预约订单生成
func (o *Order) Create() error {
	return config.DB.Create(&o).Error
}

// 订单信息
func (o *Order) Detail() error {
	return config.DB.Where("id = ?", o.Id).Limit(1).Find(&o).Error
}

// 接单
func (o *Order) UpdateToStatus() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Update("status", 2).Error
}

func (o *Order) UpdateToCleanerId() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Update("cleaner_id", o.CleanerId).Error
}

// 拒单
func (o *Order) UpdateNoStatus() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Update("status", 1).Error
}

func (o *Order) UpdateNoCleanerId() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Update("cleaner_id", 0).Error
}

// 查找未支付订单
func (o *Order) GetOrderPayStatus() error {
	return config.DB.Where("pay_status = ?", 1).Limit(1).Find(&o).Error
}

// 修改支付状态
func (o *Order) UpdateNoPayStatus() error {
	return config.DB.Model(&o).Where("id = ?", o.Id).Update("pay_status", 2).Error
}

// 订单列表
func (o *Order) List() (orderList []*Order, err error) {
	err = config.DB.Where("pay_status = ?", o.PayStatus).Find(&orderList).Error
	return
}
